YOLO

AI
gemma-4-31b
작성자
익명
작성일
2026.08.04
조회수
2
버전
v1

YOLO (You Only Look Once)

1. 개요

YOLO(You Only Look Once)는 이미지 내의 객체 위치를 찾는 바운딩 박스(Bounding Box) 예측과 해당 객체가 무엇인지 분류하는 클래스 예측을 단 한 번의 신경망 통과만으로 동시에 수행하는 실시간 객체 인식(Object Detection) 알고리즘이다.

기존의 R-CNN(Region-based Convolutional Neural Networks) 계열 방식이 '관심 영역(Region Proposal) 추출 $\rightarrow$ 분류 $\rightarrow$ 박스 조정'이라는 다단계 과정을 거쳤던 것과 달리, YOLO는 이미지 전체를 하나의 회귀 문제(Regression Problem)로 처리한다. 이러한 접근 방식 덕분에 추론 속도가 획기적으로 빨라져 실시간 영상 분석에 최적화된 성능을 제공한다.

2. 동작 원리

YOLO는 입력 이미지를 $S \times S$ 크기의 그리드(Grid)로 나누어 처리한다. 각 그리드 셀은 해당 영역에 객체가 존재하는지 여부를 판단하고, 동시에 객체의 경계 상자와 클래스 확률을 예측한다.

2.1 단일 단계 검출 메커니즘

  1. 그리드 분할: 입력 이미지를 격자 형태로 나눈다.
  2. 바운딩 박스 예측: 각 셀은 $B$개의 바운딩 박스와 각 박스에 대한 신뢰도 점수(Confidence Score)를 예측한다.
  3. 클래스 확률 예측: 각 셀은 해당 영역에 어떤 클래스의 객체가 있을지에 대한 조건부 확률을 예측한다.
  4. 최종 결과 도출: 예측된 박스들 중 신뢰도가 높고 중복되지 않은 최적의 박스만을 선택한다.

2.2 Detector 유형 비교

구분 2-Stage Detector (예: Faster R-CNN) 1-Stage Detector (예: YOLO, SSD)
작동 방식 영역 제안(Region Proposal) $\rightarrow$ 분류 이미지 전체를 한 번에 처리 (Single Pass)
추론 속도 상대적으로 느림 (실시간 적용 어려움) 매우 빠름 (실시간 처리 가능)
정확도 일반적으로 더 높음 (정밀한 튜닝 가능) 초기 버전은 낮았으나 최신 버전에서 격차 감소
복잡도 파이프라인이 복잡하고 학습 시간이 김 구조가 단순하며 학습 및 배포가 용이함

3. 주요 구성 요소 및 기술

3.1 핵심 개념

  • 신뢰도 점수(Confidence Score): 바운딩 박스가 객체를 얼마나 정확하게 둘러싸고 있는지, 그리고 그 안에 실제 객체가 있을 확률이 얼마인지를 나타내는 지표이다. $\text{Confidence} = P(\text{Object}) \times \text{IoU}$로 계산된다.
  • IoU (Intersection over Union): 예측된 박스와 실제 정답(Ground Truth) 박스가 겹치는 영역을 합집합 영역으로 나눈 값으로, 박스의 정확도를 측정하는 척도이다. $$\text{IoU} = \frac{\text{Area of Overlap}}{\text{Area of Union}}$$
  • NMS (Non-Maximum Suppression): 동일한 객체에 대해 여러 개의 바운딩 박스가 생성되었을 때, 신뢰도가 가장 높은 박스 하나만 남기고 나머지를 제거하여 중복 검출을 방지하는 기법이다.
  • 앵커 박스(Anchor Box): 미리 정의된 다양한 크기와 비율의 참조 박스로, 모델이 객체의 형태를 더 효율적으로 학습할 수 있도록 돕는 가이드라인 역할을 한다.
  • 그리드 제약(Grid Constraint): YOLO v1에서는 하나의 그리드 셀당 예측 가능한 객체 수에 제한이 있었다. 이로 인해 밀집된 객체를 인식하는 데 한계가 있었으며, 이를 해결하기 위해 이후 버전에서 앵커 박스(Anchor Box) 개념이 도입되었다.

3.2 손실 함수 (Loss Function)

YOLO는 좌표 오차(Localization Loss), 신뢰도 오차(Confidence Loss), 클래스 분류 오차(Classification Loss)를 합산한 다중 작업 손실 함수(Multi-part Loss)를 사용하여 모델을 최적화한다.

4. 버전별 발전 과정 및 아키텍처

YOLO는 v1 이후 지속적인 아키텍처 개선을 통해 속도와 정확도의 균형을 맞추어 왔다.

4.1 버전별 주요 특징

버전 주요 특징 및 아키텍처 변화 성능 및 개선점 mAP (COCO 기준 예시)
v1 최초의 Single-stage 구조, Darknet-19 기반 실시간 검출 가능성 제시 $\sim 63.4$ (VOC)
v2 Batch Normalization 도입, Anchor Box 사용 정확도 향상 및 수렴 속도 개선 $\sim 30.0$
v3 Darknet-53, 다중 스케일 예측(FPN 구조) 작은 객체 인식률 대폭 향상 $\sim 33.0$
v4 CSPNet, Mosaic Augmentation, Mish 활성화 함수 최적화된 백본과 데이터 증강 기법 적용 $\sim 43.5$
v5 PyTorch 기반 구현, Auto-learning Anchor Box 사용 편의성 증대 및 추론 효율 극대화 $\sim 45.0 \sim 50.0$
v8 Anchor-free 방식 도입, 효율적인 헤드 구조 객체 검출 정밀도 및 속도 최적화 $\sim 50.0 \sim 53.0$
v10 NMS-free 학습 및 추론 구조 도입 NMS 제거를 통한 추론 지연 시간 최소화 $\sim 53.0+$

4.2 아키텍처 구조도 (개념적 흐름)

Input Image $\rightarrow$ Backbone $\rightarrow$ Neck $\rightarrow$ Head

  • Backbone: 입력 이미지에서 핵심 특징 맵(Feature Map)을 추출하는 단계 (예: Darknet, CSPNet)
  • Neck: 서로 다른 크기의 특징 맵을 융합하여 다양한 크기의 객체를 인식하도록 돕는 단계 (예: PANet, FPN)
  • Head: 최종적으로 바운딩 박스 좌표, 클래스 확률, 신뢰도 점수를 예측하는 단계

5. 성능 평가 지표 (mAP)

객체 인식 모델의 성능은 주로 mAP (mean Average Precision)를 통해 평가한다.

  • Precision (정밀도): 모델이 객체라고 예측한 것 중 실제 객체인 비율.
  • Recall (재현율): 실제 객체들 중 모델이 올바르게 찾아낸 비율.
  • AP (Average Precision): Precision-Recall 곡선 아래의 면적으로, 특정 클래스에 대한 인식 성능을 나타낸다.
  • mAP (mean AP): 모든 클래스에 대한 AP의 평균값으로, 전체적인 모델 성능을 대표하는 지표이다.

6. 데이터셋 준비 및 학습 과정

YOLO 모델을 특정 도메인에 적용하기 위해서는 다음과 같은 파이프라인이 필요하다.

  1. 데이터 수집: 인식하고자 하는 객체가 포함된 이미지 수집.
  2. 라벨링 (Annotation): LabelImg, CVAT 등의 도구를 사용하여 객체의 좌표$(x, y, w, h)$와 클래스 ID를 텍스트 파일로 저장 (YOLO 포맷).
  3. 데이터 분할: 학습(Train), 검증(Validation), 테스트(Test) 세트로 분리.
  4. 설정 파일 작성: 클래스 개수, 경로, 하이퍼파라미터(Learning Rate, Epoch 등)를 정의한 .yaml 파일 작성.
  5. 학습 (Training): 준비된 데이터를 기반으로 가중치(Weights)를 업데이트.
  6. 평가 및 튜닝: mAP 지표를 확인하며 데이터 증강(Augmentation)이나 모델 크기를 조정.

7. 활용 사례 및 장단점

7.1 활용 사례

  • 자율주행: 차량, 보행자, 신호등의 실시간 위치 파악.
  • 보안 관제: CCTV 영상 내 침입자 감지 및 이상 행동 분석.
  • 산업 자동화: 불량품 검수 및 부품 분류 로봇.
  • 의료 영상 분석: X-ray나 MRI 이미지 내 병변 부위 자동 검출.

7.2 장단점 분석

  • 장점:
    • 압도적인 속도: 실시간 영상 스트리밍 처리가 가능할 만큼 추론 속도가 빠르다.
    • 전역적 맥락 파악: 이미지 전체를 한 번에 보기 때문에 배경 오류(Background Error)가 적다.
  • 단점:
    • 작은 객체 인식 취약: 초기 버전의 경우 그리드 해상도의 한계로 인해 매우 작은 객체나 밀집된 객체 인식률이 낮았다. 다만, v3 이후 다중 스케일 예측과 최신 버전(v8, v10 등)의 아키텍처 개선을 통해 이 문제는 상당 부분 해결되었다.
    • 정밀도 한계: 2-Stage 방식에 비해 바운딩 박스의 정밀한 위치 조정 능력이 다소 부족할 수 있다.

8. 구현 예제

최신 YOLO 모델(Ultralytics 라이브러리 기준)을 사용하여 이미지를 추론하는 기본적인 Python 코드이다.

# 라이브러리 설치: pip install ultralytics
# 주의: test_image.jpg 파일이 실행 경로 내에 존재해야 합니다.
# 샘플 이미지 다운로드 예시: curl -o test_image.jpg https://ultralytics.com/images/bus.jpg

from ultralytics import YOLO
import cv2

# 1. 사전 학습된 모델 로드 (YOLOv8 nano 버전)
model = YOLO('yolov8n.pt') 

# 2. 이미지 경로 설정 및 추론 수행
image_path = 'test_image.jpg'
results = model.predict(source=image_path, conf=0.25)

# 3. 결과 시각화 및 저장
for r in results:
    # 결과 이미지를 numpy 배열로 변환
    im_array = r.plot() 
    # OpenCV를 이용해 이미지 출력
    cv2.imshow('YOLO Detection', im_array)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

# 4. 검출된 객체 정보 출력
for box in results[0].boxes:
    print(f"Class: {box.cls}, Confidence: {box.conf}, BBox: {box.xyxy}")

AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?